package com.example.thumbnail;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;

public class ThumbnailDemo {

    public static void main(String[] args) {
        // 1.创建指定大小的缩略图
        createThumbnailImg();
        // 2.创建带有旋转和水印的缩略图
        createRotationWatermark();
        // 3.转换图片格式
        createOutputStream();
        // 4.等比例缩放图片
        createScale();
    }

    /**
     * 创建缩略图
     * 1.jpg 调整大小后保存到 2.jpg
     */
    private static void createThumbnailImg() {
        try {
            Thumbnails.of("E:\\imgs\\1.jpg").size(300, 300).toFile("E:\\imgs\\2.jpg");
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 创建带有旋转和水印的缩略图
     * 对原图加水印,然后顺时针旋转90度
     */
    private static void createRotationWatermark() {
        try {
            Thumbnails.of("E:\\imgs\\1.jpg").
                    size(600, 600). // 缩放大小
                    rotate(90). // 顺时针旋转90度
                    watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("E:\\imgs\\watermark.png")), 0.5f). // 水印位于右下角,半透明
                    outputQuality(0.8). // 图片压缩80%质量
                    toFile("E:\\imgs\\3.jpg");
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 转换图片格式
     */
    private static void createOutputStream() {
        try (OutputStream outputStream = Files.newOutputStream(Paths.get("E:\\imgs\\4.png"))) { // 自动关闭流
            Thumbnails.of("E:\\imgs\\1.jpg").
                    size(600, 600).
                    outputFormat("png"). // 转换格式
                    toOutputStream(outputStream); // 写入输出流
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 按比例缩放图片
     */
    private static void createScale() {
        try {
            Thumbnails.of("E:\\imgs\\1.jpg").
                    scale(0.8). // 图片缩放80%, 不能和size()一起使用
                    outputQuality(0.8). // 图片质量压缩80%
                    toFile("E:\\imgs\\5.jpg");
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }
}
